package com.songlanyun.modules.saleconfig.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.songlanyun.common.drive.RootEntity;
import com.songlanyun.common.utils.DateUtils;
import com.songlanyun.common.validator.group.AddGroup;
import com.songlanyun.common.validator.group.UpdateGroup;
import com.songlanyun.modules.saleconfig.model.values.PaymentDelayConfig;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

/**
 * 平台的销售配置
 *
 * @author lubo
 * @email sunlightcs@gmail.com
 * @date 2020-11-10 13:49:18
 */
@Data
@TableName("yxt_sale_config")
public class SaleConfig extends RootEntity<Integer,SaleConfig> implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 *  默认维权天数3天
	 */
	public static  Integer defaultRightsDays = 3;

	/**
	 *
	 */
	@TableId
	private Integer id;

	/**
	 * 订单流程相关=======================================
	 */

	/**
	 * 自动收货天数
	 * 已发货订单,多少天后自动确认收货,考虑物流运输时间，最长可设置30天，自提订单在配送方式中设置
	 * 默认3天
	 */
	@Min(value = 3,message = "自动收货天数最小是3天",groups = {AddGroup.class, UpdateGroup.class})
	@Max(value = 30,message = "自动收货天数请输入不大于 30 的数值",groups = {AddGroup.class,UpdateGroup.class})
	private Integer autoReceiptProcessDays;

	/**
	 * 已收货订单,多少天后关闭退款/退货功能,填写则买家可在确认收货后进行退款/退货申请，最长可设置30天
	 * 默认15天
	 */
	@Min(value = 3,message = "维权最后天数最小是3天",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 30,message = "维权最后天数最大是30天",groups = {AddGroup.class,UpdateGroup.class})
	private Integer autoCloseRightsProcessDays;

	/**
	 * 支付延时配置=============================================================
	 */
	@JsonIgnore
	@TableField(exist = false)
	private PaymentDelayConfig paymentDelayConfig;

	public PaymentDelayConfig getPaymentDelayConfig()
	{
		if(paymentDelayConfig==null)
		{
			this.paymentDelayConfig = new PaymentDelayConfig();
			this.paymentDelayConfig.setDelayDays(this.getDelayDays());
			this.paymentDelayConfig.setDelayHours(this.getDelayHours());
			this.paymentDelayConfig.setDelayMinutes(this.getDelayMinutes());
		}
		return this.paymentDelayConfig;
	}

	/**
	 * 支付延时配置（天数最大7）
	 */
	@Min(value = 0,message = "天数只允许输入大于等于0的整数",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 7,message = "天数请输入不大于 7 的数值",groups = {AddGroup.class,UpdateGroup.class})
	private Integer delayDays;
	/**
	 * 支付延时配置（小时数，最大23小时）
	 */
	@Min(value = 0,message = "小时数只允许输入大于等于0的整数",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 23,message = "小时数请输入不大于 23 的数值",groups = {AddGroup.class,UpdateGroup.class})
	private Integer delayHours;
	/**
	 * 支付延时配置（分钟数，最小10分，最大59分钟）
	 */
	@Min(value = 10,message = "分钟请输入不小于 10 的数值",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 59,message = "分钟请输入不大于 59 的数值",groups = {AddGroup.class,UpdateGroup.class})
	private Integer delayMinutes;



	/**
	 * 维权流程设置===============================================================
	 */
	/**
	 * 买家发起退款申请多少天后商家未处理，系统将自动同意
	 * 默认3天(3-30天)
	 */
	@Min(value = 3,message = "系统自动同意退款最小只能是3天",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 30,message = "系统自动同意退款最大只能是30天",groups = {AddGroup.class,UpdateGroup.class})
	private Integer applyRefundAutoProcessDays;

	/**
	 * 买家发起退货退款申请多少天后商家未处理，系统将自动同意维权。
	 *  默认3天(3-30天)
	 */
	@Min(value = 3,message = "系统将自动退货同意最小只能是3天",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 30,message = "系统将自动退货同意最大只能是30天",groups = {AddGroup.class,UpdateGroup.class})
	private Integer applyReturnAutoProcessDays;

	/**
	 * 商家同意退货多少天后买家未处理，系统将自动拒绝维权
	 * 默认3天(3-30天)
	 */
	@Min(value = 3,message = "商家同意退货多少天后买家未处理，系统将自动拒绝维权，最小是3天",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 30,message = "商家同意退货多少天后买家未处理，系统将自动拒绝维权，最小是30天",groups = {AddGroup.class,UpdateGroup.class})
	private Integer agreeReturnAutoProcessDays;

	/**
	 * 买家已退货(退货填单)多少天后商家未处理，系统将自动收货。
	 * 默认3天(3-30天)
	 */
	@Min(value = 3,message = "买家已退货(退货填单)多少天后商家未处理，系统将自动收货最小3天",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 30,message = "买家已退货(退货填单)多少天后商家未处理，系统将自动收货最小30天",groups = {AddGroup.class,UpdateGroup.class})
	private Integer returnedAutoProcessDays;

	/**
	 * 评论相关==============================================================
	 */

	/**
	 * 是否开启商品自动评论
	 */
	private Boolean commentOpen;
	/**
	 * 买家交易成功多少天后买家未评论，系统将自动评论。系统默认的时间为7天，手动设置时间最长不超过30天。评论内容为 “ 用户超时未评，系统自动好评。”
	 */
	@Min(value = 7,message = "系统将自动评论最小7天",groups = {AddGroup.class,UpdateGroup.class})
	@Max(value = 30,message = "系统将自动评论最小30天",groups = {AddGroup.class,UpdateGroup.class})
	private Integer autoCommentProcessDays;
	/**
	 * 系统评论内容为  用户超时未评，系统自动好评。
	 */
	private String defaultComment;

	/**
	 * 开启支付
	 */
	private Boolean openPayment;


	@TableField(fill= FieldFill.INSERT)
	private Date createTime;
	/**
	 *
	 */
	@TableField(fill = FieldFill.INSERT_UPDATE)
	private Date updateTime;


	/**
	 * 月权益百分比
	 */
	private BigDecimal equityPercentage;


	/**
	 * 月权益调整值
	 */
	private BigDecimal equityTrimValue;

	@Override
	public Integer getIdentity() {
		return getId();
	}

}
